// pages/save-image/index.js
Page({
  data: {
    shareText: '',// 分享链接
    // shareText: '16 乖肥鼠Chunchilla发布了一篇小红书笔记，快来看吧！ 😆 IcsBa1okHHshKyy 😆 http://xhslink.com/a/OKrwrvsXNOD8，复制本条信息，打开【小红书】App查看精彩内容！',// 乖肥鼠Chunchilla测试数据
    shortUrl: '',// 短链接
    fullHtml: '',// 网页响应数据
    resourceList: []// 资源
  },

  // /**
  //  * 生命周期函数--监听页面加载
  //  */
  // onLoad(options) {
  //   console.log('基础库版本：', wx.getAppBaseInfo().SDKVersion);
  // },

  // 输入框输入内容，获取短链接
  onInput(e) {
    this.setData({ shareText: e.detail.value.trim() });
    console.log('输入文本：', this.data.shareText);
    this.setData({ shortUrl: e.detail.value.trim().match(getApp().globalData.regex.xhsShortLinkRegex) });
    console.log('短链接：', this.data.shortUrl);
  },

  // 一键提取
  async getResource() {
    // 清空资源
    this.setData({ resourceList: [] });

    // 校验输入
    if (!this.data.shortUrl) {
      wx.showToast({
        title: '非小红书链接',
        icon: 'none'
      });
      return;
    }

    wx.showLoading({ title: '提取中...' });

    // 请求链接
    // 乖肥鼠Chunchilla提示：微信小程序的请求与浏览器不同，浏览器返回的fileId未加密，而微信小程序返回的fileId被加密为了UUID格式。
    wx.request({
      url: this.data.shortUrl,
      method: 'GET',
      header: {
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
        'Accept-Language': 'zh-CN,zh;q=0.9',
        'Connection': 'keep-alive'
      },
      success: (res) => {
        // 获取网页源码
        this.setData({ fullHtml: res.data });
        // console.log('响应数据：', this.data.fullHtml);

        // 乖肥鼠Chunchilla提示：本小程序仅针对静态图片进行开发，且部分笔记通过了业务验证，live图和视频未开发。
        // 从源代码中找到目标文本
        const match = res.data.match(/\bimageList\b.*?(?=\])/gs)[1].replace(/^imageList":/, "") + ']';
        const json = JSON.parse(match);
        // 展示素材，初始全选
        this.setData({ resourceList: json.map(resource => ({ url: resource.url, selected: true })) });
        console.log('资源：', this.data.resourceList);
        wx.hideLoading();
      },
      fail(err) {
        console.error('链接请求失败:', err.errMsg);
        wx.showToast({
          title: '提取失败',
          icon: 'none'
        });
        wx.hideLoading();
      }
    })
  },

  // 图片点击事件
  handleImageTap(e) {
    const index = e.currentTarget.dataset.index;
    const newList = this.data.resourceList.map((item, i) => {
      if (i === index) {
        return { ...item, selected: !item.selected };
      }
      return item;
    });

    this.setData({ resourceList: newList });
    console.log('更新资源选中状态：', this.data.resourceList.map(item => item.selected));
  },

  // 循环保存多项素材
  async saveResource() {
    const downloadUrlList = this.data.resourceList.filter(i => i.selected).map(i=>i.url);

    // 显示加载提示
    wx.showLoading({ title: '下载中...' });

    try { 
      for (const url of downloadUrlList) {
        // 下载文件
        const { tempFilePath } = await this.downloadFile(url);
         // 保存到相册
      await this.saveToAlbum(tempFilePath);
      }
      wx.showToast({
        title: '保存成功',
        icon: 'none'
      })
    } catch (err) {
      console.error('保存失败:', err)
      // 保存失败提示及处理
      if (err.errMsg.includes('cancel')) {
        // 用户取消操作时的自定义提示
        wx.showToast({
          title: '您已取消保存',
          icon: 'none',
          duration: 2000
        });
      } else if (err.errMsg.includes('auth deny')) {
        // 权限问题的自定义提示
        wx.showModal({
          title: '权限提示',
          content: '需要相册权限才能保存图片',
          confirmText: '去设置',
          success: (res) => {
            if (res.confirm) wx.openSetting();
          }
        });
      } else {
        console.log('保存失败：', err.errMsg);
        // 其他错误统一处理
        wx.showToast({
          title: '保存失败',
          icon: 'none'
        })
      }
    } finally {
      wx.hideLoading();
    }
  },

  // 封装下载方法
  downloadFile(url) {
    return new Promise((resolve, reject) => {
      wx.downloadFile({
        url,
        success: resolve,
        fail: reject
      });
    });
  },

  // 封装保存到相册方法
  saveToAlbum(tempFilePath) {
    return new Promise((resolve, reject) => {
      wx.getSetting({
        success: res => {
          if (!res.authSetting['scope.writePhotosAlbum']) {
            wx.authorize({
              scope: 'scope.writePhotosAlbum',
              success: () => this.doSave(tempFilePath).then(resolve).catch(reject),
              fail: reject
            });
          } else {
            this.doSave(tempFilePath).then(resolve).catch(reject);
          }
        }
      });
    });
  },

  // 执行保存操作
  doSave(tempFilePath) {
    return new Promise((resolve, reject) => {
      wx.saveImageToPhotosAlbum({
        filePath: tempFilePath,
        success: resolve,
        fail: reject
      });
    });
  },

});